lib.use(['element', 'form','laydate','table','searchInput','btnProp','tablePlug'], function () {
    var layer = layui.layer;
    var form = layui.form;
    var laydate = layui.laydate;
    var searchInput = layui.searchInput;
    var btnProp = layui.btnProp;
    var formForm = layui.Form('formForm');
    var table = layui.table;
    var tablePlug = layui.tablePlug;//表格插件
    var tranLineTable;
    var reqUrl;
    var id;
    table.set(common.layui.table.config(tablePlug));

    //各种控件初始化
    initControl();

    //表单提交方法
    form.on('submit(addFormSubmitFilter)', formSubmit);


    //=====================================================从表==========================================================
    // 渲染从表表格
   tranLineTable = table.render({
        elem: '#tranLineTable'
        ,toolbar: '#toolbar'
        //,where: {orderId:1}
        ,data: []
        ,even: true
        , cols: [[
            {type:'checkbox'}
            ,{type: 'numbers', title: '编号' }
            ,{ field: 'id',  hide: true }
           ,{ title: '商品ID', field: 'goodsId',hide:true}
            ,{ title: '商品编码', field: 'goodsCode',}
            ,{ title: '商品名称', field: 'goodsName',}
            ,{ title: '商品型号', field: 'goodsModel',}
            ,{ title: '商品规格', field: 'goodsSpec',}
           ,{ title: '基本单位ID', field: 'baseUomId', hide:true}
            ,{ title: '基本数量', field: 'baseNum',}
            ,{ title: '基本单位', field: 'baseUomName',}
            ,{ title: '库存单位', field: 'qtyUomId',  hide:true}
            ,{ title: '库存数量', field: 'qtyNum', edit:'text'}
            ,{ title: '库存单位', field: 'qtyUomName',}
           ,{ title: '辅助单位', field: 'auxUomId',  hide:true}
            ,{ title: '辅助数量', field: 'auxNum', edit:'text'}
            ,{ title: '辅助单位', field: 'auxUomName',}
            ,{ title: '商品单价', field: 'goodsPrice',}
            ,{ title: '商品挂牌价', field: 'goodsListPrice',}
            ,{ title: '商品金额', field: 'goodsAmount',}
            ,{ title: '商品折扣', field: 'goodsDiscount', edit:'text'}
            ,{ title: '件换算', field: 'converUnit1',}
            ,{ title: '片换算', field: 'converUnit2',}
            ,{ title: '备注', field: 'remark', edit:'text'}
        ]]
        ,done: function (res, curr, count) {
            layer.closeAll('loading');
        }
    });

    //明细添加按钮
    btnProp.render($.extend(BASE_GOODS_CONFIG_SINGLE,{
        dst: '#add',
        done:function(ck){
            addRowLine(ck.data);
        }
    }));
    //头工具栏事件
    table.on('toolbar(tranLineTableFilter)', function(obj){
        var checkStatus = table.checkStatus(obj.config.id);
        if(obj.event=='del'){
            delLine(table.checkStatus('tranLineTable'))
        }

    })

    // 监听编辑如果商品数量为非正整数时默认为1 并且弹出提示信息并且重新获得焦点等待输入
    table.on('edit(tranLineTableFilter)', rowEditFun);



    /**
     * 页面加载完成调用方法
     * 初始化方法可以写在这里
     */
    (function () {
        id=common.util.getParam('id');
        id?loadFormData(id):addInit();
    })();


//=====================================================各种自定义方法==========================================================


    /**
     * 页面控件初始化
     */
    function initControl() {

        //初始化日期控件
        //初始化审核时间}日期控件
        laydate.render({elem: '#checkDate',format:'yyyy-MM-dd HH:mm:ss'});
        //初始化创建时间}日期控件
        laydate.render({elem: '#createTime',format:'yyyy-MM-dd HH:mm:ss'});
        //初始化修改时间}日期控件
        laydate.render({elem: '#updateTime',format:'yyyy-MM-dd HH:mm:ss'});


            //调入仓库名称弹出窗口
        searchInput.render($.extend(BASE_WAREHOUSE_CONFIG_SINGLE,{
            dst: '#toWarehouseNameSearchInput',

            done:function (obj,nextObj,datas) {
                var data={
                    toWarehouseName:datas[0].warehouseName,
                    toWarehouseCode:datas[0].warehouseCode,
                    toWarehouseId:datas[0].id
                }
                form.val('formForm',data);
            }
        }));
            //调出仓库名称弹出窗口
        searchInput.render($.extend(BASE_WAREHOUSE_CONFIG_SINGLE,{
            dst: '#fromWarehouseNameSearchInput',
            done:function (obj,nextObj,datas) {
                var data={
                    fromWarehouseName:datas[0].warehouseName,
                    fromWarehouseCode:datas[0].warehouseCode,
                    fromWarehouseId:datas[0].id
                }
                form.val('formForm',data);
            }
        }));

        //填冲下拉框数据字典
        //<select name="dbType" dist-name="sys.Ent_DbTypeEnum" config='{"data": [{"value": "全部","key": "0","index":"2"}],"selectedIndex": "1"}'></select>
        //config:{
        //    data:{[                 自定义下拉框数据
        //          value:'全部',      显示文字
        //          key:0,            值
        //          index:1           当前值需要插入位置(累加完自定义数据后再从下标从0计算)
        //          ]},
        //    selectedIndex:1         当前下拉框默然选中位置（下标从0计算)
        // }
        formForm.selectRender();

        /**
         * Form表单校验
         */
        form.verify({
                toWarehouseName: function(value, item){
                if(!value){
                    return '调入仓库名称不能为空';
                }
            },
                fromWarehouseName: function(value, item){
                if(!value){
                    return '调出仓库名称不能为空';
                }
            },
        });
    }

    function formSubmit(data) {
       /* if(!common.layui.table.verify(table,tableConfig)){
            return
        }*/
        var param = formForm.getData();
        param.tranLineEntityList=table.cache['tranLineTable'];
        param=beforeSave(param);
        /*console.log(param)*/
        common.ajax.post(reqUrl, param, function (resp) {
            afterSave(resp);
            common.util.alert('操作成功', function () {
                common.util.returnWindow('tranHeadList.html')
            })
        })
        return false;
    }

    /**
     * 删除明细行
     * @param obj
     */
    function delLine(obj) {
        // 获得当前选中的，不管它的状态是什么？只要是选中的都会获得
        var checkedIds;
        if (tranLineTable.config.checkStatus) {
            // 开启了复选状态记忆
            checkedIds = tablePlug.tableCheck.getChecked(tranLineTable.config.id);
        } else {
            // 不开启
            checkedIds = table.checkStatus(tranLineTable.config.id).data;
        }
        if(checkedIds.length==0)return;
        console.log(checkedIds)
        layer.confirm('确认删除!', function(index){
            tablePlug.del(tranLineTable.config.id, checkedIds);
            layer.close(index);
            layer.msg('删除成功！', {icon: 1});
        });
    }


    /**
     * 明细行编辑事件
     * @param obj
     */
    function rowEditFun(obj) {

       /* var that = this;
        var tdElem = $(that).closest('td');
        var field = obj.field;
        var value = obj.value;
        //判断必须为数据才能填写
        if (!common.util.isNumeric(value,3)) {
            setTimeout(function () {
                var objTemp ={};
                objTemp[field] = 1;
                obj.update(objTemp);
                tdElem.click();
            }, 200);
        }
        //计算总额
        setTimeout(function () {
            // 商品金额 =  商品数量 * 商品价格 - 商品折扣
            obj.update({goodsAmount:obj.data.baseNum*obj.data.goodsPrice-obj.data.goodsDiscount});
        }, 200);*/

       var converData = busCommon.conver(obj.data);
       var data = {
           baseNum:converData.baseNum,
           goodsAmount:converData.baseNum*converData.goodsPrice - converData.goodsDiscount
       };
        console.log(data);
        obj.update(data);
    }

    /**
     * 明细行添加后调用方法
     * @param datas
     */
    function addRowLine(_datas) {
        var newDatas=[];
        $.each(_datas,function () {
            this.goodsPrice = this.listPrice;
            this.goodsId = this.id;
            this.goodsCode = 1;
            this.goodsAmount=0;
            this.baseNum=0;
            newDatas.push(this)
        })

        var config=
            {
                table:table,
                tableObj:tranLineTable,
                fromPk: "goodsId",
                toPk:"goodsId",
                datas:newDatas,
                done: function (obj,newObj) {
                    obj.goodsNum+=newObj.goodsNum;
                    return obj;
                }
            }
        common.layui.table.addRows(config);
    }
    /**
     * 编辑时加载数据
     */
    function loadFormData(id) {
        common.ajax.get('/inv/tranHead/info/'+id, {}, function (resp) {
            formForm.setData(updateInit(resp.tranHead));
            common.layui.table.get('tranLineTable').load(resp.tranHead.tranLineEntityList)
            afterLoadFormData(resp.tranHead);
        });
    }

    /**
     * 编辑时加载数据
     */
    function afterLoadFormData(tranHead) {
        //状态特殊业务时对操作按钮的禁用

        if(tranHead.tranState==2){
            common.util.disabledBtn("formSubmitBtn");
        }
    }

    /**
     * 新增调用方法
     *
     */
    function addInit() {
        //新增
        reqUrl='/inv/tranHead/save';
        //设置新增初始值
        var defVal={
            isValid:1,
            tranType:2,
            tranState:1,
            tranDate:common.util.getDate(),
            //orderDate:common.util.getDate()
        }
        formForm.setData(defVal);
        $(".disabled-row").hide();
    }

    /**
     * 修改调用方法
     * @param data 当前对像参数
     * @returns {*}
     */
    function updateInit(data) {
        reqUrl='/inv/tranHead/update';
        //更新时的其它操作
        return data
    }


    /**
     * 保存前调用方法
     * @param param
     * @returns {*}
     */
    function beforeSave(data) {
        var from = data.fromWarehouseId;

        var to = data.toWarehouseId;

        /*if(from == to){
            return '入库与出库不能为同一仓库';
        }*/
        //保存前的其它操作
        return data;
    }
    /**
     * 保存后调用方法
     */
    function afterSave(data) {
        //保存后的其它操作
    }
});
